package cn.assumejson.springframework.beans.factory.config;

import cn.assumejson.springframework.beans.factory.DisposableBean;

/**
 * 单例注册接口
 *
 * @author Mr. Li
 * @version 1.0
 * @since 1.0 2021/11/30 7:12
 */
public interface SingletonBeanRegistry {
    /**
     * 获取单例
     *
     * @param beanName beanName
     * @return bean
     */
    Object getSingleton(String beanName);

    Object getSingleton(String beanName,boolean allowEarlyReference);

    /**
     * 注册单例
     *
     * @param beanName
     * @param singletonObject
     */
    void registerSingleton(String beanName, Object singletonObject);

    /**
     * 执行销毁方法
     */
    void destroySingletons();

    /**
     * 判断单例池中是否包含了该bean
     *
     * @param beanName beanName
     * @return
     */
    boolean containsSingleton(String beanName);

    /**
     * 获取锁对象
     * @return
     */
    Object getSingletonMutex();

}
